from flask import Flask
from loguru import logger
from configs.configuration import app_config
import os
from controller import init_view
from dao import init_databases
from extensions import init_plugs

if not Flask:
    raise RuntimeError("pip3 install flask")


def create_app(config_name=None):
    application = Flask(__name__)

    logger.info(application.url_map)

    if not config_name:
        # 尝试从本地环境中读取
        config_name = os.getenv('FLASK_CONFIG', 'development')

    # 引入数据库配置
    environment = app_config[config_name]
    application.config.from_object(environment)

    # 注册各种插件
    init_plugs(application)

    # 注册数据库
    init_databases(application)

    # 注册路由
    init_view(application)

    # 注册命令
    # init_script(app)

    logo()

    return application


def logo():
    print('''
              _           _         ______ _           _    
     /\      | |         (_)       |  ____| |         | |   
    /  \   __| |_ __ ___  _ _ __   | |__  | | __ _ ___| | __
   / /\ \ / _` | '_ ` _ \| | '_ \  |  __| | |/ _` / __| |/ /
  / ____ \ (_| | | | | | | | | | | | |    | | (_| \__ \   < 
 /_/    \_\__,_|_| |_| |_|_|_| |_| |_|    |_|\__,_|___/_|\_\\

    ''')


webapp = create_app()

# flask没有合适的参数反序列化与返回结果序列化，可以看看看flask-restful api或者看看 fastapi框架，这个是可以完成参数的反序列化与结果的序列化
if __name__ == '__main__':

    # 如果依旧无法其他ip使用，这可能是IDE的锅，可以直接命令行启动，python3 app.py
    webapp.run(host='0.0.0.0', debug=True)
